<?php
  /** Ajout d'un adhérent dans le système
   * @author Sebastian Mosser
   */
   
class fMemberAdd extends aFeature {
   public function __construct() {
      $this->_acl = new AccessControlList();
      $this->_acl->setGranted(3); $this->_acl->setGranted(7);
   }

   public static function getTocEntry() {
      return "Ajout d'un adhérent";
   }

   public static function getRealName() {
		return "Ajout d'un adhérent";
	}
	
	public static function getSemantic() {
		$res  = "Cette fonctionalité permet d'ajouter un adhérent dans le système.";
		return $res;
	}

   
   protected function run() {
   	$action = PropRetriever::getProp($_POST,"action");
   	if ($action == "add")
   		return $this->addAMember();
   	else 
			return $this->displayForm();
   }
   
   private function addAMember() {
//   	var_dump($_POST);
   	// Récupération des champs de formulaire
   	 $lastName = PropRetriever::getProp($_POST,"lastName");
   	 $firstName = PropRetriever::getProp($_POST,"firstName");
   	 $birthDate = PropRetriever::getProp($_POST,"birthDate");
   	 $gender = PropRetriever::getProp($_POST,"gender");
   	 $birthCity = PropRetriever::getProp($_POST,"birthCity");
   	 $adress = PropRetriever::getProp($_POST,"adress");
   	 $livingCity = PropRetriever::getProp($_POST,"livingCity");
   	 $phone = PropRetriever::getProp($_POST,"phone");
   	 $cellPhone = PropRetriever::getProp($_POST,"cellPhone");
   	 $licence = PropRetriever::getProp($_POST,"licence");
   	 $entryDate = PropRetriever::getProp($_POST,"entryDate");
   	 $web = PropRetriever::getProp($_POST,"web");
   	 $clubFunction = PropRetriever::getProp($_POST,"clubFunction");
   	 $cotisation = PropRetriever::getProp($_POST,"cotisation");
   	 $type = PropRetriever::getProp($_POST,"moneyType");

   	 // Traitement des erreurs 
   	 $errors = array();
   	 if ($lastName == "")
   	 	 $errors["lastName"] = "Le nom de famille ne peut pas être vide !";
   	 
   	 if ($firstName == "")
   	 	 $errors["firstName"] = "Le prénom ne peut pas être vide !";
   	 
   	 if ($birthDate == "")
   	 	$errors["birthDate"] = "La date de naissance ne peut pas être vide !";
   	 else if (! Date::isValidDate($birthDate))
   	 		$errors["birthDate"] = "La date de naissance est invalide !";
   	 	
   	 	if ($phone != "" && (strlen($phone) != 10 || ! is_numeric($phone)))
   	 		$errors["phone"] = "Le numéro de téléphone fixe est incorrect !";
   	 	else if ($phone != "" && $phone[0] != 0)
   	 		$errors["phone"] = "Le numéro de téléphone doit commencer par '0' !";
   	 		
   	 		if ($cellPhone != "" && 
   	 				(strlen($cellPhone) != 10 || ! is_numeric($cellPhone)))
   	 		$errors["cellPhone"] = "Le numéro de téléphone mobile est incorrect !";
   	 	else if ($cellPhone != "" && ($cellPhone[0] != 0 || $cellPhone[1] != 6))
   	 		$errors["phone"] = "Le numéro de téléphone mobile doit commencer par '06' !";
   	 	
   	 	if ($entryDate == "")
   	 	  $errors["entryDate"] = "La date d'entrée ne peut pas être vide !";
   	  else if (! Date::isValidDate($entryDate))
   	 		$errors["entryDate"] = "La date d'entrée est invalide !";
   	 	
   	 	
   	 // Il y a des erreurs : 
   	 if (count($errors) != 0)
   	 	 return $this->displayForm($errors);
   	 else {
   	 
   	 	 // Instanciation du membre
   	 	 $aMember = new Member();
   	 	 $aMember->setLicenceNo($licence);
   	 	 $aMember->setEntryDate(Date::fromSql($entryDate));
   	 	 $aMember->setLastName(ucwords(strtolower(stripslashes($lastName))));
   	 	 $aMember->setFirstName(ucwords(strtolower(stripslashes($firstName))));
   	 	 $aMember->setGender($gender);
   	 	 $aMember->setAddress(stripslashes($adress));
   	 	 $aMember->setLivingCity($livingCity);
   	 	 $aMember->setBirthDate(Date::fromSql($birthDate));
   	 	 $aMember->setBirthCity($birthCity);
   	 	 $aMember->setPhone($phone == "" ? "" : "+33".substr($phone,1));
   	 	 $aMember->setCellPhone($cellPhone == ""? "": "+33".substr($cellPhone,1));
   	 	 $aMember->setPicture(Member::$NO_PICTURE);
   	 	 if ($web == "True")
   	 	 	 $aMember->setExportable(True);
   	 	 else
   	 	 	 $aMember->setExportable(False);
   	 	 
   	 	 // Ajout des infos connexes :
   	 	 $aMember->addFunction(Login::seasonChoosen(False),$clubFunction);
   	 	 
   	 	 if ($cotisation != "-1")
   	 	   $aMember->addCotisation(Login::seasonChoosen(False),$cotisation,$type);
   	 	    	 	 
   	 	 // Le membre est - il présent ?
   	 	 $existant = Member::soundsLikeExistant($lastName,$firstName,$birthDate);
   	 	 $force = PropRetriever::getProp($_GET,"force");
   	 	 if ($existant) {
   	 	 	if ($force != 'YES')
   	 	 		return $this->warningsDuplicate($existant,$aMember);
   	 	 }	
   	 	 
   	 	 $aMember->create();
   	 	 $page = "<h1> Ajout effectué avec succès </h1>";
   	 	 return $page . $aMember->displayLong();
   	 }
   }
   
   private function warningsDuplicate($duplicate,$member) {
   
   	 $duplicateMembers = "";
   	 foreach($duplicate as $aMember) {
   	 	$duplicateMembers .= '<tr>';
   	 	$duplicateMembers .= $aMember->displayInlineOnClick("displayMember");
   	 	$duplicateMembers .= "</tr>";
   	 }
   	 
   	 $hidden = $member->dumpAsHiddenForm();
   
   	$page = <<<EOT
   	<h1> Ajout d'un adhérent </h1>
   	<h2> Doublons détéctés ! </h2>
<p> <span class="error"> Balloon à detecté des membres dans la base de données ressemblant étrangement a l'adhérent que vous souhaitez saisir </span> .</p>
<p> Vous pouvez visionner les membres présent dans la base de données en cliquant sur leur numéro de licence </p>
<p> Si vous souhaitez forcer l'ajout, cliquez sur <span class="error"> [ Forcer l'ajout ]</span>, sinon, cliquez sur <span class="error"> [ Annuler ] </span> </p>
<div align=center>
  
  <form method="post" accept-charset="utf-8" action="?force=YES" >
  ${hidden}
  <input type="hidden" name="action" value="add" />
  <input type="submit" value="Forcer l'ajout" class="edit" />
  </form>
  
  &nbsp;&nbsp;&nbsp;&nbsp;
  
  <form method="post" accept-charset="utf-8" action="?undo">
  ${hidden}
  <input type="submit" value="Annuler" class="edit" />
  </form>

</div>

<h2> Liste des doublons potentiels </h2>
<div align="center">
<table class="resultset" >
<tr> <th> Licence </th> <th> Nom </th> <th> Date de Naissance </th> </tr>
${duplicateMembers}
</table>
</div>

<h2> Affichage d'un doublon </h2>
<div id="duplicateMember">
<p align="center"> Cliquez sur un numéro de licence pour afficher le membre </p> 
</div>
EOT;
		return $page;   
   }
   
   private function displayForm($errors = array()) {
   	 
   	 // Récupération des infos
   	 $lastName = PropRetriever::getProp($_POST,"lastName");
   	 $firstName = PropRetriever::getProp($_POST,"firstName");
   	 $birthDate = PropRetriever::getProp($_POST,"birthDate");
   	 
   	 $birthZip = PropRetriever::getProp($_POST,"birthZip");
   	 $birthCityId = PropRetriever::getProp($_POST, "birthCity");
   	 
   	 $birthZipInput = "";
   	 if ($birthZip == "FOREIGN") {
   	 	$birthZipInput = '<input type="hidden" name="birthZip" id="birthZip" value="FOREIGN" type="hidden" />';
   	 	$birthZipInput .= '<input name="na" disabled="yes" value="Etranger" class="edit" />';
   	 }
   	 else {
   	 	$birthZipInput = '<input type="text" name="birthZip" id="birthZip" 
							class="edit" value="'.$birthZip.'" onblur="updateBirthCity();"/>';
   	 }
   	 
   	 $birthCityList = "";
   	 if ($birthZip == "") {
	   	 $birthCityList = '<span id="birthCityList">';
			 $birthCityList .= '<select name="birthCity" class="edit">';
			 $birthCityList .= '<option value="-1" > Inconnue </option>';
			 $birthCityList .= '</select> </span>'; 
			}
			else {
				$optionsBirthCity = City::getAsList($birthZip,$birthCityId);
				$birthCityList = '<span id="birthCityList">';
				$birthCityList .= '<select name="birthCity" class="edit">';
				$birthCityList .= $optionsBirthCity;
				$birthCityList .= '</select> </span>'; 
			}
   	 
   	 
   	 $gender = PropRetriever::getProp($_POST,"gender");
   	 if ($gender != Member::$FEMALE) {
   	 	$sex = 
   	 		"<option value=\"".Member::$MALE."\" selected > Masculin </option>";
   	 	$sex .= 
   	 		"<option value=\"".Member::$FEMALE."\" > Féminin </option>";
   	 }
   	 else {
   	 	$sex = 
   	 		"<option value=\"".Member::$MALE."\" > Masculin </option>";
   	 	$sex .= 
   	 		"<option value=\"".Member::$FEMALE."\" selected > Féminin </option>";
   	 }
   	 
   	 $adress = PropRetriever::getProp($_POST,"adress");
   	 $phone = PropRetriever::getProp($_POST,"phone");
   	 $cellPhone = PropRetriever::getProp($_POST,"cellPhone");
   	 
   	 $livingZip = PropRetriever::getProp($_POST, "livingZip");
   	 $livingCityId = PropRetriever::getProp($_POST, "livingCity");

   	 $livingCityList = "";
   	 if ($livingZip == "") {
	   	 $livingCityList = '<span id="livingCityList">';
			 $livingCityList .= '<select name="livingCity" class="edit">';
			 $livingCityList .= '<option value="-1" > Inconnue </option>';
			 $livingCityList .= '</select> </span>';
		}
		else {
			$optionsLivingCity = City::getAsList($livingZip,$livingCityId);
			$livingCityList = '<span id="livingCityList">';
			$livingCityList .= '<select name="livingCity" class="edit">';
			$livingCityList .= $optionsLivingCity;
			$livingCityList .= "</select>	</span>"; 	
		}
 		
 		$licence = PropRetriever::getProp($_POST,"licence");
 		$entryDate = PropRetriever::getProp($_POST,"entryDate");
 		$web = PropRetriever::getProp($_POST,"web");
 		$webOptions = "";
 		if ($web == "False") {
 			$webOptions .= '<option value ="True"> Visible </option>';
 			$webOptions .= '<option value ="False" selected> Invisible </option>';
 		}
 		else {
 			$webOptions .= '<option value ="True" selected> Visible </option>';
 			$webOptions .= '<option value ="False"> Invisible </option>';
 		}
 		
 		$clubFunction = PropRetriever::getProp($_POST,"clubFunction");
 		if ($clubFunction == "")
 			$clubFunction = 2; // Par defaut, on est joueur !
 		$clubFunctionOptions = ClubFunction::getAsList($clubFunction);
 		
 		$cotisation = PropRetriever::getProp($_POST,"cotisation");
 		$cotisationOptions = "<option value=\"-1\"> Impayée </option>";
 		$cotisationOptions .= Cotisation::getAsList($cotisation);
 		
 		
 		$moneyType = PropRetriever::getProp($_POST,"moneyType");
 		$moneyTypeList = "";
 		if ($moneyType == "") {
 			$moneyTypeList .= "<span id=\"moneyTypeList\">";
 			$moneyTypeList .= '<input class="edit" type="text" value="Non Approprié" disabled="yes" />' ;
 			$moneyTypeList .= "</span>";
 		} else {
 			$moneyTypeList .= "<span id=\"moneyTypeList\">";
 			$moneyTypeList .= "<select name=\"moneyType\" class=\"edit\">";
			$moneyTypeList .= MoneyType::getAsList($moneyType);
 			$moneyTypeList .= "</select> </span>";
 		}
 		
 		
 		// Traitement des erreurs :
 		$style = array();
 		$style["lastName"] = ""; $style["firstName"] = "";
 		$style["birthDate"] = ""; $style["phone"] = "";
 		$style["cellPhone"] = ""; $style["entryDate"] = "";
 		
 		$fails = "";
 		foreach($errors as $k => $v) {
 			$style[$k] = " class=\"error\" ";
 			$fails .= "<li> <span class=\"error\"> $v </span> </li>";
 		}
 		if ($fails != "") {
 			$fails = "<h2> Des erreurs sont survenues ! </h2> <p> <ul> " . $fails;
 			$fails .= "</ul> </p>";
 		}
 		
 		
   	// Calcul de la page
   	$page = <<<EOS

<h1> Ajout d'un adhérent dans le système </h1>

<p> Remplissez les champs du formulaire, puis cliquez sur 
  <span class="error"> [ Ajouter ] </span> pour ajouter le nouvel adhérent
  dans le système. 
</p>

<p align="center"> 
	<a href="#" onclick="toggleHelp()">
		<span class="error">Cliquez ici  pour afficher ou masquer l'aide </span>
	</a>
</p>

<div id="onlineHelp" style="display: none;">

<p> <strong> Aide a la saisie des données </strong> : 
<ul> 
  
  <li> Dans le formulaire <code> État Civil / Naissance </code> :
  	<ul>
  		<li> Pour saisir la date de naissance, vous pouvez directement la taper au format <code>AAAA-MM-JJ</code>, ou cliquer dans le champ pour faire apparaitre un calendrier</li>
  		<li> Si la ville de naissance n'est pas située en France, cliquez sur le titre <code> Code Postal </code> pour effectuer votre recherche sur les villes étrangères. Re - cliquez sur ce même lien pour revenir dans le mode de selection normal.</li>
  		<li> Si la liste des villes disponibles ne se met pas a jour automatiquement, cliquez sur <code>Ville</code> pour forcer la mise a jour </li>
  	</ul>
  </li>
  
  <li> Dans le formulaire <code> Adresse / Contacts </code> :
  	<ul>
  		<li> Saisissez l'adresse sur 2 lignes maximum</li>
  		<li> Si la liste des villes disponibles ne se met pas a jour automatiquement, cliquez sur <code>Ville</code> pour forcer la mise a jour </li>
  		<li> Rentrez les numéros de téléphone au format habituel (0123456789), Balloon les convertira pour vous au format international (+33 1 23 45 67 89). </li>
  	</ul>
  </li>
</ul> 
</p> 

</div>

${fails}

<br />


<div align="center">

<form method="post" accept-charset="utf-8" name="addMember"
			action="?add" >

<input type="hidden" name="action" value="add" />

<table> 

<tr> 
<td align="center">

	<fieldset>
		<legend> État Civil / Naissance </legend>
		<br />
		
		<label> 
			<span ${style["lastName"]}>Nom : </span>
			<input type="text" name="lastName" class="edit" value="${lastName}" />
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span ${style["firstName"]} >Prénom : </span>
			<input type="text" name="firstName" class="edit" value="${firstName}" />
			&nbsp; &nbsp;
		</label>
		<br />
		<label> 
			<span>Sexe : </span>
			<select name="gender" class="edit" />
			${sex}
			</select>
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span ${style["birthDate"]}>Né le :</span>
			<!-- <input type="text" name="birthDate" class="edit" value="${birthDate}" 
							onclick="javascript:showCal('BirthDateCal')" /> -->
			 <input type="text" name="birthDate" id="birthDate" class="edit" value="${birthDate}" 
							onclick="javascript:displayBalloonCal('birthDate')" />
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span> <a href="#" onclick="foreignBirthCity();">Code Postal</a> : </span>
			<span id="birthZipCode">
			${birthZipInput}
			</span>
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span> <a href="#" onclick="updateBirthCity();" >Ville :</a> </span>
			<span id="cityList">
			${birthCityList}
			</span>
			&nbsp; &nbsp;
		</label>
		<br />  <br />
	</fieldset>
	
</td>

<td> &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </td>

<td align="center">
	<fieldset>
		<legend> Adresse / Contacts </legend>
		<br />
		
		<label> 
		<div align="left"> &nbsp; &nbsp; <strong> Adresse : </strong> </div>
		<textarea name="adress" class="edit">${adress} </textarea> 
		</label>
		<br /> <br />
		
		<label> 
			<span> Code Postal : </span>
			<input type="text" name="livingZip" id="livingZip" 
							class="edit" value="${livingZip}" onblur="updateLivingCity();"/>
			</span>
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span> <a href="#" onclick="updateLivingCity();" >Ville :</a> </span>
			${livingCityList}
			&nbsp; &nbsp;
		</label>
		<br />  

		<label> 
			<span ${style["phone"]} >Tel. Fixe : </span>
			<input type="text" name="phone" class="edit" value="${phone}" />
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span ${style["cellPhone"]}>Tel. Mobile : </span>
			<input type="text" name="cellPhone" class="edit" value="${cellPhone}" />
			&nbsp; &nbsp;
		</label>
		<br />

	</fieldset>

</td>
	
</tr>

<tr>
 <td> <br /> </td>
 <td> &nbsp;&nbsp;&nbsp;&nbsp; </td>
 <td> <br/> </td>
</tr>

<tr>
<td align="center">
	<fieldset>
		<legend> Infos Club / Fédération </legend>
		<br />
		
		<label> 
			<span>Licence : </span>
			<input type="text" name="licence" class="edit" value="${licence}" />
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span ${style["entryDate"]} >Date d'entrée:</span>
			<input type="text" name="entryDate" class="edit" value="${entryDate}" 
							onclick="javascript:showCal('EntryDateCal')" />
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span>Site Web : </span>
			<select name="web" class="edit" />
			${webOptions}
			</select>
			&nbsp; &nbsp;
		</label>
		
		<br />  <br />
	</fieldset>
</td>

<td> &nbsp;&nbsp;&nbsp;&nbsp; </td>

<td align="center">
	<fieldset>
		<legend> Rôle / Cotisation </legend>
		<br />
		
		<label> 
			<span> Fonction : </span>
			<select name="clubFunction" class="edit" />
			${clubFunctionOptions}
			</select>
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span> Cotisation : </span>
			<select name="cotisation" id="cotisation" class="edit"
							onchange="updateMoney();"/>
			${cotisationOptions}
			</select>
			&nbsp; &nbsp;
		</label>
		<br />
		
		<label> 
			<span> Paiement : </span>
			${moneyTypeList}
			&nbsp; &nbsp;
		</label>
		
		<br />  <br />
	</fieldset>
</td>
</tr>	

<tr>
 <td> <br /> </td>
 <td> &nbsp;&nbsp;&nbsp;&nbsp; </td>
 <td> <br/> </td>
</tr>

<tr>
 <td align="center"> <input type="submit" value="Ajouter" class="edit" /> </td>
 <td> &nbsp;&nbsp;&nbsp;&nbsp; </td>
 <td align="center" > <input type="reset" value="Remise a Zéro" class="edit" /> </td>
</tr>
</table>

</form>
</div>
EOS;
		 return $page;
   
   }
   
 }

?>